iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
Modern Web

工程師的商務英語生存指南:30 天打造你的「多益情境單字庫」Web App系列 第 3

Day 3:架構骨幹!多益單字庫的資料庫實體關聯圖(ERD)設計

  • 分享至 

  • xImage
  •  

昨天我們定義了多益商務單字的語料格式,今天進入後端與全端開發非常關鍵的一步:資料庫實體關聯圖(ERD)規劃

一個好的資料模型必須兼顧資料完整性與查詢效能。在我們的多益單字 App 中,除了單純儲存單字,更需要支援「商務情境分類」、「間隔重複複習進度」以及「錯題本記錄」。


一、 核心實體(Entities)拆解

為了避免資料冗餘並符合第三正規化(3NF),我們將系統拆為五張核心資料表:

  1. users(使用者資料表)
    • 記錄使用者基本資訊與學習天數。
  2. categories(商務情境分類表)
    • 獨立管理商務分類(如:IT 採購、人力資源、商務合約、物流運輸),方便未來動態擴充情境。
  3. vocabularies(單字核心表)
    • 存放單字、詞性、中文釋義與多益核心星級,透過外鍵關聯到 categories
  4. user_vocab_progress(學習進度與記憶狀態表)
    • 記錄特定使用者對特定單字的熟悉度(Stage 1~5)、複習次數,以及關鍵的下一次複習時間(next_review_at)。
  5. quiz_questions & mistake_notebook(測驗題庫與錯題表)
    • quiz_questions:存放多益 Part 5 選擇題題幹、四個選項與正確解答。
    • mistake_notebook:記錄使用者答錯的題目關聯、錯誤次數與最後答錯時間。

二、 資料庫關聯結構(Schema 定義)

我們用清楚的欄位結構來定義彼此的主鍵(PK)與外鍵(FK)關聯:

1. 商務情境分類表(categories

  • id (PK, INT / UUID)
  • name (VARCHAR, 情境名稱,如 "Information Technology")
  • code (VARCHAR, 縮寫代碼,如 "IT")
  • description (TEXT, 情境說明)

2. 單字主表(vocabularies

  • id (PK, INT / UUID)
  • category_id (FK, 關聯至 categories.id)
  • word (VARCHAR, 單字)
  • part_of_speech (VARCHAR, 詞性:noun, verb, adj...)
  • meaning_zh (VARCHAR, 中文釋義)
  • collocations (TEXT / JSON, 高頻搭配詞)
  • example_sentence (TEXT, 職場情境英文例句)
  • sentence_translation (TEXT, 例句中文翻譯)

3. 使用者單字記憶狀態表(user_vocab_progress

  • id (PK)
  • user_id (FK, 關聯至 users.id)
  • vocab_id (FK, 關聯至 vocabularies.id)
  • repetition_level (INT, 記憶階段 0~5)
  • last_reviewed_at (TIMESTAMP, 上次複習時間)
  • next_review_at (TIMESTAMP, 下次應複習時間,建立索引以利每日查詢)
  • is_mastered (BOOLEAN, 是否已完全掌握)

4. 錯題筆記本(mistake_notebook

  • id (PK)
  • user_id (FK, 關聯至 users.id)
  • question_id (FK, 關聯至 quiz_questions.id)
  • wrong_count (INT, 累積答錯次數)
  • last_wrong_answer (VARCHAR, 上次選錯的選項)
  • updated_at (TIMESTAMP)

三、 架構設計思考點:主鍵選型與效能考量

在設計這套 ERD 時,我們特別做了兩個考量:

  1. 分散式主鍵(UUID)vs 自增主鍵(Auto-increment ID)
    • 核心字典表(vocabularies)資料量相對固定,可使用一般整數主鍵降低索引大小;但涉及使用者動態資料(如 user_vocab_progress 與測驗記錄),未來若走微服務或資料同步,採用 UUID 能夠有效避免 ID 衝突與爬蟲列舉。
  2. 索引設計(Indexing)
    • 使用者打開 App 時最頻繁的查詢是「今天有哪些單字要複習?」。因此在 user_vocab_progress 表上,針對 (user_id, next_review_at) 建立複合索引(Composite Index),能讓查詢每日排程的 SQL 達到最佳效能。

今日小結與明日預告

今天我們完成了系統的資料庫實體關聯設計,明確了實體之間的 1:N 與 N:M 映射關係。

明天 Day 4,我們將動手把今天的設計落地成真正的 SQL DDL 建立指令碼,並實際塞入第一批「IT 商務情境」的多益種子資料(Seed Data)!


上一篇
Day 2:打好地基!多益商務語料規格與系統需求拆解
系列文
工程師的商務英語生存指南:30 天打造你的「多益情境單字庫」Web App3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言